From 8b7d8431aa57bc88cd4d4a7e875da15ebf7ac7b5 Mon Sep 17 00:00:00 2001 From: Alexander Larsson Date: Wed, 28 Jan 2009 16:37:56 +0100 Subject: [PATCH] Make gdk_window_get_toplevel() for CHILD window with root as parent Having GDK_WINDOW_CHILD windows with root as the parent apparently works, and metacity uses it. The current gdk_window_get_toplevel() returns the root window for that, which is wrong, so we check that explicitly. --- gdk/gdkwindow.c | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/gdk/gdkwindow.c b/gdk/gdkwindow.c index 36cb4ef5bb..978dd2e609 100644 --- a/gdk/gdkwindow.c +++ b/gdk/gdkwindow.c @@ -1662,6 +1662,10 @@ gdk_window_get_parent (GdkWindow *window) * @window: a #GdkWindow * * Gets the toplevel window that's an ancestor of @window. + * + * Any window type but %GDK_WINDOW_CHILD is considered a + * toplevel window, as is a %GDK_WINDOW_CHILD window that + * has a root window as parent. * * Return value: the toplevel window containing @window **/ @@ -1673,8 +1677,14 @@ gdk_window_get_toplevel (GdkWindow *window) g_return_val_if_fail (GDK_IS_WINDOW (window), NULL); obj = (GdkWindowObject *)window; + while (GDK_WINDOW_TYPE (obj) == GDK_WINDOW_CHILD) - obj = (GdkWindowObject *)obj->parent; + { + if (obj->parent == NULL || + GDK_WINDOW_TYPE (obj->parent) == GDK_WINDOW_ROOT) + break; + obj = obj->parent; + } return GDK_WINDOW (obj); } -- 2.30.2